extern int Push (double *topePila, int tamanioPila, int *cantidadElementos, double valor);
extern int Pop (double *topePila, int tamanioPila, int *cantidadElementos, double *valor);
extern int SumaTotal (double *topePila, int tamanioPila, int *cantidadElementos, double *resultadoSuma);

#define TAMANIO_PILA 55
#define EPSILON 0.0000000001	// For double comparison

int sonIguales (double a, double b){
	return (fabs(a - b) < EPSILON);
}

int main (void){

	double pila[TAMANIO_PILA];
	int error = 0;
	double resultadoSuma = 0;
	int cantidadElementos = 0;
	double elemento;

	Push(pila, TAMANIO_PILA, &cantidadElementos, 1.4);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 2.6);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 6);
	Push(pila, TAMANIO_PILA, &cantidadElementos, -2);
	Pop (pila, TAMANIO_PILA, &cantidadElementos, &elemento);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 1.4);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 2.6);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 6);
	Push(pila, TAMANIO_PILA, &cantidadElementos, -2);
	Pop (pila, TAMANIO_PILA, &cantidadElementos, &elemento);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 1.4);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 2.6);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 6);
	Push(pila, TAMANIO_PILA, &cantidadElementos, -2);
	Pop (pila, TAMANIO_PILA, &cantidadElementos, &elemento);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 1.4);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 2.6);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 6);
	Push(pila, TAMANIO_PILA, &cantidadElementos, -2);
	Pop (pila, TAMANIO_PILA, &cantidadElementos, &elemento);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 1.4);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 2.6);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 6);
	Push(pila, TAMANIO_PILA, &cantidadElementos, -2);
	Pop (pila, TAMANIO_PILA, &cantidadElementos, &elemento);
	Push(pila, TAMANIO_PILA, &cantidadElementos, -2.4);
	Push(pila, TAMANIO_PILA, &cantidadElementos, -12);
	Push(pila, TAMANIO_PILA, &cantidadElementos, -5.2);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 5.5);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 2.13);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 95.2);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 100.8);
	Push(pila, TAMANIO_PILA, &cantidadElementos, -50.1);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 38.25);
	Push(pila, TAMANIO_PILA, &cantidadElementos, 111.11);

	/* PRUEBA 1: Probar el comportamiento para una pila más grande */
	SumarTodosLosElementos(pila, TAMANIO_PILA, &cantidadElementos, &resultadoSuma);
	if (sonIguales (resultadoSuma,333.29)) printf ("Prueba 1: OK\n");
	else printf ("Prueba 1: ERROR. Da %f, se esperaba 333.29\n",resultadoSuma);
}
